package com.stellar.circle.domain.sChatMessage;

import com.stellar.circle.basic.entity.SChatMessage;
import com.stellar.circle.controller.admin.sChatMessage.vo.*;
import com.stellar.web.core.bean.PageResult;

import java.util.List;

/**
 * 私聊消息表领域服务接口
 *
 * @author Jqchan
 * @version 1.0
 * @date 2025-06-12 21:21:21
 */
public interface SChatMessageDomainService {

    /**
     * 分页查询
     *
     * @param requestPageVO 分页查询参数
     * @return 分页结果
     */
    PageResult<SChatMessageResponseVO> page(SChatMessageRequestPageVO requestPageVO);

    /**
     * 删除数据
     *
     * @param id 主键ID
     * @return 是否成功
     */
    Boolean delete(Long id);

    /**
     * 新增数据
     *
     * @param requestVO 新增参数
     * @return 新增结果
     */
    SChatMessage saveMessage(SChatMessage requestVO);

    /**
     * 标记消息为已读
     *
     * @param messageId
     * @return
     */
    Boolean markAsRead(List<Long> messageId);

    /**
     * 获取未读消息数量
     *
     * @return
     */
    Integer getUnreadCount();

    /**
     * 获取消息列表
     *
     * @return
     */
    PageResult<SChatMessageResponseVO> getMessageList(int page, int pageSize);

    /**
     * 生成会话ID
     *
     * @param userId
     * @param friendId
     * @return
     */
    String generateConversationId(Long userId, Long friendId);

    /**
     * 获取历史消息
     *
     * @param conversationId
     * @param lastMsgId
     * @param limit
     * @return
     */
    List<SChatMessageResponseVO> getHistory(String conversationId, Long lastMsgId, int limit);

    /**
     * 发送离线消息
     *
     * @param userId
     */
    void sendOfflineMessages(Long userId);
}
